Computer programs can be complex, large entities, and are made up of computer code. To ensure that the computer code has been developed properly, so that execution of the computer code properly functions and does not result in errors, significant analysis of the computer code may be performed while the computer code is being developed, and after the computer code has been developed. Such analysis can help ensure that the computer code has been coded properly, so that the computer code properly functions to expectations, and does not result in errors.
There are many different techniques that can be performed to ensure that execution of the computer code properly functions and does not result in errors. One technique that has been used is fault injection. In fault injection, purposeful errors, or faults, are injected into the computer code, such as via the data on or over which the computer code is to be executed. Subsequent execution of the computer code on this faulty data can then be used to isolate errors that result from the execution of the computer code, and to ensure that the computer code properly functions to expectations.
A problem with fault injection and other techniques in analyzing computer code is that it is sometimes difficult to isolate which data is causing which errors when the computer code is executed. When different elements of the data appear to be causing the same error, in other words, it can be difficult to determine which element is actually causing the error. As a result, revising the computer code so that it does not result in such errors when being executed can be time-consuming.
Furthermore, execution of computer code can sometimes result in no errors, even though the computer code is not properly functioning to expectations. That is, the computer code executes without error, but the end result of the execution of the computer code does not satisfy expectations. Even though execution of the computer code does not result in errors, it is said that the computer code is not properly functioning, since the end result of the execution does not satisfy expectations or specification. This type of problem is difficult to detect, and thus subsequently correct, using prior art analysis techniques.
For example, a customer may be provided a computing system running computer code to perform a given functionality. The computer code may be causing a given exception or other error, for which the root cause could not be determined, since the error may be generic and result from a number of different causes. Typically, what is done is to simulate the customer's environment, and run the computer code in a debugger environment step-by-step to try to locate and rectify the exact cause of the error. However, simulating a customer's environment can be difficult to accomplish perfectly, and furthermore, for errors that have multiple causes, it can be difficult to locate the and rectify the exact cause of an error.
For these and other reasons, there is a need for the present invention.